﻿using System;
using System.ComponentModel;
using Jay.Sc2.Bof.Lib.State;

namespace Jay.Sc2.Bof.Windows
{
	public class ZergStateProxy : StateProxy
	{
		private ZergState m_State;
		[Browsable(false)]
		public override IState State { get { return m_State; } }
		public ZergStateProxy(ZergState state) { m_State = state; }
		[CategoryAttribute("Goal")]
		public override TimeSpan Time { get { return new TimeSpan(0, 0, m_State.Time); } set { m_State.Time = (int)(value.TotalSeconds); } }
		[CategoryAttribute("Informations")]
		public override int Food { get { return m_State.Food; } }
		[CategoryAttribute("Informations")]
		public int Larva { get { return m_State.Larva; } }
		[CategoryAttribute("Informations")]
		public int Army { get { return m_State.Army; } }
		[CategoryAttribute("Informations")]
		public override int Supply { get { return m_State.Supply; } }
		[CategoryAttribute("Informations")]
		public override int MineralsIncome { get { return m_State.MineralsIncome; } }
		[CategoryAttribute("Informations")]
		public override int WorkersOnMinerals { get { return m_State.WorkersOnMinerals; } }
		[CategoryAttribute("Informations")]
		public override int WorkersOnGas { get { return m_State.WorkersOnGas; } }
		[CategoryAttribute("Informations")]
		public override int GasIncome { get { return m_State.GasIncome; } }
		[CategoryAttribute("Worker")]
		public int Drone { get { return m_State.Drone; } set { m_State.Drone = value; } }
		[CategoryAttribute("Structure")]
		public int Extractor { get { return m_State.Extractor.Count; } set { m_State.Extractor.Count = value; } }
		[CategoryAttribute("Goal")]
		public override int Minerals { get { return (int)m_State.Minerals; } set { m_State.Minerals = value; } }
		[CategoryAttribute("Goal")]
		public override int Gas { get { return (int)m_State.Gas; } set { m_State.Gas = value; } }
		[CategoryAttribute("Unit")]
		public int Overlord { get { return m_State.Overlord; } set { m_State.Overlord = value; } }
		[CategoryAttribute("Structure")]
		public int Hatchery { get { return m_State.Hatchery.Count; } set { m_State.Hatchery.Count = value; } }
		[CategoryAttribute("Structure")]
		public int Lair { get { return m_State.Lair.Count; } set { m_State.Lair.Count = value; } }
		[CategoryAttribute("Structure")]
		public int EvolutionChamber { get { return m_State.EvolutionChamber.Count; } set { m_State.EvolutionChamber.Count = value; } }
		[CategoryAttribute("Structure")]
		public int SpawningPool { get { return m_State.SpawningPool.Count; } set { m_State.SpawningPool.Count = value; } }
		[CategoryAttribute("Structure")]
		public int SpineCrawler { get { return m_State.SpineCrawler.Count; } set { m_State.SpineCrawler.Count = value; } }
		[CategoryAttribute("Structure")]
		public int SporeCrawler { get { return m_State.SporeCrawler.Count; } set { m_State.SporeCrawler.Count = value; } }
		[CategoryAttribute("Unit")]
		public int Baneling { get { return m_State.Baneling; } set { m_State.Baneling = value; } }
		[CategoryAttribute("Unit")]
		public int Zergling { get { return m_State.Zergling; } set { m_State.Zergling = value; } }
		[CategoryAttribute("Structure")]
		public int BanelingNest { get { return m_State.BanelingNest.Count; } set { m_State.BanelingNest.Count = value; } }
		[CategoryAttribute("Structure")]
		public int GreaterSpire { get { return m_State.GreaterSpire.Count; } set { m_State.GreaterSpire.Count = value; } }
		[CategoryAttribute("Structure")]
		public int Hive { get { return m_State.Hive.Count; } set { m_State.Hive.Count = value; } }
		[CategoryAttribute("Structure")]
		public int HydraliskDen { get { return m_State.HydraliskDen.Count; } set { m_State.HydraliskDen.Count = value; } }
		[CategoryAttribute("Structure")]
		public int InfestationPit { get { return m_State.InfestationPit.Count; } set { m_State.InfestationPit.Count = value; } }
		[CategoryAttribute("Structure")]
		public int NydusNetwork { get { return m_State.NydusNetwork.Count; } set { m_State.NydusNetwork.Count = value; } }
		[CategoryAttribute("Structure")]
		public int RoachWarren { get { return m_State.RoachWarren.Count; } set { m_State.RoachWarren.Count = value; } }
		[CategoryAttribute("Structure")]
		public int Spire { get { return m_State.Spire.Count; } set { m_State.Spire.Count = value; } }
		[CategoryAttribute("Structure")]
		public int UltraliskCavern { get { return m_State.UltraliskCavern.Count; } set { m_State.UltraliskCavern.Count = value; } }
		[CategoryAttribute("Unit")]
		public int BroodLord { get { return m_State.BroodLord; } set { m_State.BroodLord = value; } }
		[CategoryAttribute("Unit")]
		public int Corruptor { get { return m_State.Corruptor; } set { m_State.Corruptor = value; } }
		[CategoryAttribute("Unit")]
		public int Hydralisk { get { return m_State.Hydralisk; } set { m_State.Hydralisk = value; } }
		[CategoryAttribute("Unit")]
		public int Infestor { get { return m_State.Infestor; } set { m_State.Infestor = value; } }
		[CategoryAttribute("Unit")]
		public int Mutalisk { get { return m_State.Mutalisk; } set { m_State.Mutalisk = value; } }
		[CategoryAttribute("Unit")]
		public int Overseer { get { return m_State.Overseer; } set { m_State.Overseer = value; } }
		[CategoryAttribute("Unit")]
		public int Queen { get { return m_State.Queen; } set { m_State.Queen = value; } }
		[CategoryAttribute("Unit")]
		public int Roach { get { return m_State.Roach; } set { m_State.Roach = value; } }
		[CategoryAttribute("Unit")]
		public int Ultralisk { get { return m_State.Ultralisk; } set { m_State.Ultralisk = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool BehemothReactor { get { return m_State.BehemothReactor.Available; } set { m_State.BehemothReactor.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool BuildingArmor { get { return m_State.BuildingArmor.Available; } set { m_State.BuildingArmor.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool CaduceusReactor { get { return m_State.CaduceusReactor.Available; } set { m_State.CaduceusReactor.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool CloakingField { get { return m_State.CloakingField.Available; } set { m_State.CloakingField.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool CorvidReactor { get { return m_State.CorvidReactor.Available; } set { m_State.CorvidReactor.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool DurableMaterials { get { return m_State.DurableMaterials.Available; } set { m_State.DurableMaterials.Available = value; } }
		//[CategoryAttribute("Structure")]
		//public int EngineeringBay { get { return m_State.EngineeringBay.Count; } set { m_State.EngineeringBay.Count = value; } }
		//[CategoryAttribute("Structure")]
		//public int FusionCore { get { return m_State.FusionCore.Count; } set { m_State.FusionCore.Count = value; } }
		//[CategoryAttribute("Structure")]
		//public int GhostAcademy { get { return m_State.GhostAcademy.Count; } set { m_State.GhostAcademy.Count = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool HiSecAutoTracking { get { return m_State.HiSecAutoTracking.Available; } set { m_State.HiSecAutoTracking.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool InfantryArmor1 { get { return m_State.InfantryArmor1.Available; } set { m_State.InfantryArmor1.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool InfantryArmor2 { get { return m_State.InfantryArmor2.Available; } set { m_State.InfantryArmor2.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool InfantryArmor3 { get { return m_State.InfantryArmor3.Available; } set { m_State.InfantryArmor3.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool InfantryWeapons1 { get { return m_State.InfantryWeapons1.Available; } set { m_State.InfantryWeapons1.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool InfantryWeapons2 { get { return m_State.InfantryWeapons2.Available; } set { m_State.InfantryWeapons2.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool InfantryWeapons3 { get { return m_State.InfantryWeapons3.Available; } set { m_State.InfantryWeapons3.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool InfernalPreIgniter { get { return m_State.InfernalPreIgniter.Available; } set { m_State.InfernalPreIgniter.Available = value; } }
		//[CategoryAttribute("Structure")]
		//public int MissileTurret { get { return m_State.MissileTurret.Count; } set { m_State.MissileTurret.Count = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool MoebiusReactor { get { return m_State.MoebiusReactor.Available; } set { m_State.MoebiusReactor.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool NeosteelFrames { get { return m_State.NeosteelFrames.Available; } set { m_State.NeosteelFrames.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool NitroPacks { get { return m_State.NitroPacks.Available; } set { m_State.NitroPacks.Available = value; } }
		//[CategoryAttribute("Special")]
		//public int Nuke { get { return m_State.Nuke; } set { m_State.Nuke = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool PersonalCloaking { get { return m_State.PersonalCloaking.Available; } set { m_State.PersonalCloaking.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool SeekerMissile { get { return m_State.SeekerMissile.Available; } set { m_State.SeekerMissile.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool ShipPlating1 { get { return m_State.ShipPlating1.Available; } set { m_State.ShipPlating1.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool ShipPlating2 { get { return m_State.ShipPlating2.Available; } set { m_State.ShipPlating2.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool ShipPlating3 { get { return m_State.ShipPlating3.Available; } set { m_State.ShipPlating3.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool ShipWeapons1 { get { return m_State.ShipWeapons1.Available; } set { m_State.ShipWeapons1.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool ShipWeapons2 { get { return m_State.ShipWeapons2.Available; } set { m_State.ShipWeapons2.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool ShipWeapons3 { get { return m_State.ShipWeapons3.Available; } set { m_State.ShipWeapons3.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool StrikeCannon { get { return m_State.StrikeCannon.Available; } set { m_State.StrikeCannon.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool VehiclePlating1 { get { return m_State.VehiclePlating1.Available; } set { m_State.VehiclePlating1.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool VehiclePlating2 { get { return m_State.VehiclePlating2.Available; } set { m_State.VehiclePlating2.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool VehiclePlating3 { get { return m_State.VehiclePlating3.Available; } set { m_State.VehiclePlating3.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool VehicleWeapons1 { get { return m_State.VehicleWeapons1.Available; } set { m_State.VehicleWeapons1.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool VehicleWeapons2 { get { return m_State.VehicleWeapons2.Available; } set { m_State.VehicleWeapons2.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool VehicleWeapons3 { get { return m_State.VehicleWeapons3.Available; } set { m_State.VehicleWeapons3.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool WeaponRefit { get { return m_State.WeaponRefit.Available; } set { m_State.WeaponRefit.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool SiegeTech { get { return m_State.SiegeTech.Available; } set { m_State.SiegeTech.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool Stimpack { get { return m_State.Stimpack.Available; } set { m_State.Stimpack.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool ConcussiveShells { get { return m_State.ConcussiveShells.Available; } set { m_State.ConcussiveShells.Available = value; } }
		//[CategoryAttribute("Upgrade")]
		//public bool CombatShield { get { return m_State.CombatShield.Available; } set { m_State.CombatShield.Available = value; } }

	}

}
